package cc.mrbird.common.utils;

import cc.mrbird.common.domin.DataMap;
import cc.mrbird.common.domin.JsonBean;
import cc.mrbird.common.utils.reflect.ReflectUtils;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
import org.apache.commons.lang3.StringUtils;

import java.util.*;

public class ParseJsonUtil {
    /**
     * 解析返回对象为key value形式
     **/
    public static void parseDataMapKey(String result, Object obj, String[] arr) throws Exception {
        JsonBean jsonBean = JSONObject.parseObject(JSONObject.parseObject(result).toString(), JsonBean.class);
        if (!jsonBean.getCode().equals("0")) {
            throw new Exception();
        }
        List<DataMap> list = JSON.parseObject(jsonBean.getDataMap(), new TypeReference<List<DataMap>>() {
        }.getType());
        //判断是否为空
        Optional.ofNullable(list).orElseGet(() -> {
            return new ArrayList<>();
        }).forEach(y -> {
            //初始化参数
            String param = StrUtil.toCamelCase(StringUtils.isNumeric(StringUtils.substring(y.getKey(), 0, 1)) ? "n" + y.getKey() : y.getKey());
            //判断是否存在并转驼峰命名
            if (Arrays.stream(arr).anyMatch(x -> x.equals(param))) {
                //添加属性值
                ReflectUtils.invokeSetter(obj, param, y.getValue());
            }
        });
    }

    /**
     * 解析返回对象为普通数组形式
     **/
    public static JsonBean parseDataMaps(String result) {
        JsonBean jsonBean = JSONObject.parseObject(JSONObject.parseObject(result).toString(), JsonBean.class);
        return jsonBean;
    }

/*    *//**
     * 解析并返回对象（核心指标）
     **//*
    public static CoreIndex2 ParseCoreIndex(String types[], CoreIndex2 coreIndex) {
        JSONObject jsonStr = new JSONObject();
        jsonStr.put("InterfaceName", "coreMetricsFromGroups");
        jsonStr.put("provice", Enumerations.HENANCODE);
        coreIndex.setSdate(DateUtil.getDateToStr(new Date(), "yyyy-MM-dd HH:mm:ss"));
        coreIndex.setProviceCode(Enumerations.HENANCODE);
        coreIndex.setProvice("河南");
        //遍历请求
        Arrays.stream(types).forEach(x -> {
            jsonStr.put("type", x);
            String result = HttpClientUtil.doPostIcnoc(jsonStr.toJSONString());
            try {
                ParseJsonUtil.parseDataMapKey(result, coreIndex, ReflectUtils.getFiledName(coreIndex));
            } catch (Exception e) {
                e.printStackTrace();
            }
        });
        return coreIndex;
    }

    *//**
     * 解析并返回对象（舆情重保）
     **//*
    public static List<Opinion> ParseOpinion() throws Exception {
        // 组装参数
        JSONObject obj = new JSONObject();
        obj.put("InterfaceName", "publicopinionFromGroups");
        obj.put("type", "01");
        obj.put("provice", Enumerations.HENANCODE);
        String jsonStr = JSONObject.toJSONString(obj);
        // /请求，获取数据
        String result = HttpClientUtil.doPostIcnoc(jsonStr);
        JsonBean jsonBean = ParseJsonUtil.parseDataMaps(result);
        if (!jsonBean.getCode().equals("0")) {
            throw new Exception();
        }
        return JSON.parseObject(jsonBean.getDataMap(), new TypeReference<List<Opinion>>() {
        }.getType());
    }*/
}
